home *** CD-ROM | disk | FTP | other *** search
/ ftp.mactech.com 2010 / ftp.mactech.com.tar / ftp.mactech.com / machack / Hacks96 / FlyPaper.sit / Fly Paper / FlyPaper Source / App Sources / MagicWindow.cpp < prev    next >
Text File  |  1996-06-22  |  3KB  |  154 lines

  1. #ifndef MAGICWINDOW_H
  2. #include "MagicWindow.h"
  3. #endif
  4.  
  5. #ifndef FLYPAPERINIT_H
  6. #include "FlyPaperINIT.h"
  7. #endif
  8.  
  9. #ifndef FLYPAPERAPP_H
  10. #include "FlyPaperApp.h"
  11. #endif
  12.  
  13. #ifndef CLIPPINGFILE_H
  14. #include "ClippingFile.h"
  15. #endif
  16.  
  17. #ifndef CLIPPINGWINDOW_H
  18. #include "ClippingWindow.h"
  19. #endif
  20.  
  21. #include "Floaters.h"
  22.  
  23. #ifndef __DRAG__
  24. #include <Drag.h>
  25. #endif
  26.  
  27. static
  28. void MagicDisposeProc (WindowPtr win)
  29. {
  30.     try {
  31.         FlyPaperGestaltPtr            data = GetINITData ();
  32.         
  33.         if (data && data -> magicWindow == win) {
  34.             data -> magicWindow = nil;
  35.         }
  36.  
  37.         DisposeFloater (win);
  38.     } catch (...) {
  39.     }
  40. }
  41.  
  42. static
  43. void MagicEventHandler (EventRecord *theEvent, WindowPtr win)
  44. {
  45.     try {
  46.         if (theEvent -> what == updateEvt) {
  47.             BeginUpdate(win);
  48.             EndUpdate (win);
  49.         }
  50.     } catch (...) {
  51.     }
  52. }
  53.  
  54. static pascal
  55. OSErr MagicTrackingHandler (DragTrackingMessage message, WindowPtr win, long myA5,
  56.     DragReference dragRef)
  57. {
  58.     try {
  59.     
  60.     
  61.     
  62.     } catch (OSErr error) {
  63.         return error;
  64.     } catch (...) {
  65.         return memFullErr;
  66.     }
  67.     return noErr;
  68. }
  69.  
  70. static
  71. pascal OSErr MagicReceiveHandler (WindowPtr win, long homeA5, DragReference dragRef)
  72. {
  73.     long                oldA5 = SetA5(homeA5);
  74.     GrafPtr                oldPort;
  75.     Point                dropLocation = { 1, 1 };
  76.             
  77.     try {
  78.         GetPort (&oldPort);
  79.         SetPort (win);
  80.         LocalToGlobal (&dropLocation);
  81.         SetPort (oldPort);
  82.         short        tile = 0;
  83.         
  84.         MoveWindow (win, 30000, 30000, false);
  85.         
  86.         unsigned short            numItems;
  87.         
  88.         OSErr                    error = CountDragItems (dragRef, &numItems);
  89.         if (error)
  90.             throw error;
  91.                     
  92.         for (unsigned short whichItem = 1; whichItem <= numItems; ++whichItem) {
  93.             ItemReference            dragItem;
  94.             unsigned short            numFlavors;
  95.             
  96.             error = GetDragItemReferenceNumber (dragRef, whichItem, &dragItem);
  97.             if (error)
  98.                 throw error;
  99.             
  100.             CClippingFile*            file = CClippingFile::NewClippingFileFromDragItem (dragRef,
  101.                                         dragItem, dropLocation, tile);
  102.             if (file) {
  103.                 try {
  104.                     FSSpec            spec;
  105.                     file -> GetFSSpec (spec);
  106.                     QueueUpFileForProcessing (&spec);
  107.                     delete file;
  108.                 } catch (...) {
  109.                     delete file;
  110.                     throw;
  111.                 }
  112.                 ++tile;
  113.             }
  114.         }
  115.     } catch (OSErr error) {
  116.         SetA5 (oldA5);
  117.         return error;
  118.     } catch (...) {
  119.         SetA5 (oldA5);
  120.         return memFullErr;
  121.     }
  122.     
  123.     SetA5 (oldA5);
  124.     return noErr;
  125. }
  126.  
  127. WindowPtr    CreateMagicWindow (void)
  128. {
  129.     Rect        bounds = { 30000, 30000, 30003, 30003 };
  130.     WindowPtr    win = NewFloater (0, &bounds, "\pFly Paper!", false, plainDBox, (WindowPtr) -1,
  131.                     true, 0, 0, MagicEventHandler, MagicDisposeProc);
  132.     if (!win)
  133.         throw memFullErr;
  134.         
  135.     FlyPaperGestaltPtr            data = GetINITData ();
  136.     data -> magicWindow = win;
  137.         
  138.     static DragTrackingHandlerUPP        trackingHandler=0;
  139.     static DragReceiveHandlerUPP        receiveHandler=0;
  140.  
  141.     if (!trackingHandler)
  142.         trackingHandler = NewDragTrackingHandlerProc (MagicTrackingHandler);
  143.     if (!receiveHandler)
  144.         receiveHandler = NewDragReceiveHandlerProc (MagicReceiveHandler);
  145.         
  146.     if (trackingHandler && receiveHandler) {
  147.         InstallTrackingHandler (trackingHandler, win, (void*) GetCurrentA5 ());
  148.         InstallReceiveHandler (receiveHandler, win, (void*) GetCurrentA5 ());
  149.     } else
  150.         throw memFullErr;
  151.  
  152.     return win;
  153. }
  154.